home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / public / TeX / modes.mf < prev    next >
Text File  |  1994-08-01  |  39KB  |  1,104 lines

  1. % Compiled 1991 by Karl Berry from modes collected by Doug Henderson,
  2. % Pierre MacKay, and others.  This file is in the public domain.
  3. % Please change the definitions of |localfont|, |screen_cols|, and
  4. % |screen_rows| at the end of file (see explanations below).
  5. % When you make a new |mode_def|, please send it to {\tt
  6. % karl@cs.umb.edu} or {\tt dlatex@cmsa.berkeley.edu}.  Please mention
  7. % what fonts at what sizes you tested it on.  This will help other
  8. % people wondering where particular values came from.  Ideally, you
  9. % would try normal, bold, and italic variants, at sizes around 5$\,$pt,
  10. % 10$\,$pt and 15$\,$pt.
  11. % You can run this file through {\tt mft} to generate a \TeX\
  12. % file, if you like reading typeset output instead of computer screens.
  13. %%% def mode_def
  14. %%% addto font_size coding_scheme font_face_byte landscape landscape_
  15. % @mffile{
  16. %   author = "Pierre MacKay, Doug Henderson, et al."
  17. %   version = "0.7",
  18. %   date = "Tue Jul 23 14:07:37 EDT 1991"
  19. %   filename = "modes.mf",
  20. %   contact = "Karl Berry",
  21. %   email = "karl@cs.umb.edu"
  22. %   address = "135 Center Hill Rd. // Plymouth, MA 02360"
  23. %   checksum = "1103   5359  38973",
  24. %   codetable = "ISO/ASCII",
  25. %   supported = "yes",
  26. %   docstring = "
  27. % This file collects all known \MF\ modes, some of which have not been
  28. % tested.  It also makes definitions to put specials identifying the
  29. % mode in the \MF\ GF output, and to put the coding scheme and other
  30. % so-called Xerox-world information in the TFM output.  Finally, it
  31. % defines some code to handle write-white devices better; this code
  32. % comes into play if a |mode_def| includes the statement
  33. % |mode_write_white_setup_;|.  This only works for those fonts which
  34. % follow Computer Modern's conventions for using |font_setup|.
  35. % This file follows a naming convention that has emerged in the
  36. % discussion of |mode_def|s in {\sl TUGboat}.
  37. % \item{1)} The print engine is identified wherever possible,
  38. %   rather than the printer which incorporates that engine.
  39. % \item{2)} Because |mode_def| names may not contain digits,
  40. %   each digit is spelled out; e.g., {\tt RicohFourZeroEightZero}.
  41. % \item{3)} For historical reasons, some modes have synonyms of all
  42. %   lowercase letters, e.g., `cx' for `CanonCX'.  These abbreviations
  43. %   mostly come from {\tt waits.mf}, a predecessor to this file.
  44. %
  45. % This file is typically loaded when making a \MF\ base; for example,
  46. % the command line {\tt inimf plain input modes} makes a file {\tt
  47. % plain.base} (or {\tt plain.bas}, or something like that) with all the
  48. % modes herein defined (plain itself defines modes called |proof|,
  49. % |smoke|, and |lowres|.)
  50. % A user selects a particular mode when s/he runs \MF, by assigning to
  51. % the variable |mode|.  For example, typing
  52. % {\tt \char`\\mode:=CanonCX; input cmr10}
  53. % sets up values appropriate for the CanonCX engine.
  54. % If no mode is assigned, the default is |proof| mode, as stated in {\sl
  55. % The \MF book}.  This is the cause of the ``{\tt .2602gf}'' files which
  56. % are a periodic question in the \TeX\ community.  The remedy is simply
  57. % to assign a different mode---|localfont|, for example.
  58. % Every site should define the mode |localfont| to be a synonym for the
  59. % mode most commonly used there.  This file defines |localfont| to be
  60. % |CanonCX|.  The values for |screen_rows| and |screen_cols|, which
  61. % determine how big \MF's window for online output is, should perhaps
  62. % also be changed; individual users should definitely change them to
  63. % their own tastes.
  64. % This file defines {\tt ?} to type out a list of all the known
  65. % |mode_def|s (once only).
  66. % A |mode_def| is a \MF\ definition that typically consists of a series
  67. % of assignments to various device-specific variables, either primitive
  68. % or defined in plain.  These variables include the following (page
  69. % numbers refer to {\sl The \MF book\/}:
  70. % |aspect_ratio|: the ratio of the vertical resolution to the horizontal
  71. %   resolution (page 94).
  72. % |blacker|: a correction added to the width of stems and similar
  73. %   features, to account for devices which would otherwise make them too
  74. %   light (page 93).  (Write-white devices are best handled by a more
  75. %   sophisticated method than adding to |blacker|, as explained above.)
  76. % |fillin|: a correction factor for diagonals and other features which
  77. %   would otherwise be ``filled in'' (page 94).  An ideal device would
  78. %   have |fillin=0| (page 94).  Negative values for |fillin| will
  79. %   probably either gross effects or none at all.
  80. % |fontmaking|: if nonzero at the end of the job, \MF\ makes a TFM file
  81. %   (page 315).
  82. % |o_correction|: a correction factor for the ``overshoot'' of curves
  83. %   beyond the baseline (or x-height, or some other line).  High
  84. %   resolution curves look better with overshoot, so such devices should
  85. %   have |o_correction=1|; but at low resolutions, the overshoot appears
  86. %   to simply be a distortion (page 93).  Here some additional comments
  87. %   about |o_correction|, courtesy of Pierre MacKay (edited by Karl):
  88. %   At present, I find that |o_correction| works nicely at 80 pixels per
  89. %   em, and gets increasingly disturbing as you move down towards 50
  90. %   pixels per em. Below that I do not think it ought to happen at all.
  91. %
  92. %   The problem, of course, is that full |o_correction| is supposed to
  93. %   occur only at the zenith and nadir of the curve of `o', which is a
  94. %   small region at high resolution, but may be a long line of
  95. %   horizontal pixels at medium resolution.  The full |o_correction|
  96. %   does not change a 300$\,$dpi {\tt cmr10}, but it changes a 21-pixel
  97. %   high {\tt cmr12} to be 23 pixels high.  The extra height and depth
  98. %   is seen along a line of seven pixels at the bottom and five at the
  99. %   top.  This is a pronounced overshoot indeed.
  100. %
  101. %   For high-resolution devices, such as phototypesetters, the values
  102. %   for |blacker|, |fillin|, and |o_correction| don't matter all that
  103. %   much, so long as the values are within their normal ranges: between
  104. %   0 and 1, with the values approaching 0, 0, and 1 respectively.
  105. % |pixels_per_inch|: the horizontal resolution; the \MF\ primitive
  106. %   |hppp| (which is what determines the extension on the GF filename,
  107. %   as among other things) is computed from this (page 94).
  108. %
  109. %   To be more precise, you can determine the resolution of a font given
  110. %   a |mode_def| and a magnification |m| by simply multiplying
  111. %   |pixels_per_inch| for that |mode_def| by |m|.  (Of course, your
  112. %   results may differ from \MF's if you don't use equivalent
  113. %   fixed-point arithmetic routines.)  Then you can determine the number
  114. %   used in the name of the GF font output by rounding.  For example, a
  115. %   font generated at |magstep(.5)| (which is $\sqrt{1.2}$, which \MF
  116. %   computes as 1.09544) for a printer with |pixels_per_inch=300| will
  117. %   have a resolution of 328.63312 dots per inch, and the GF filename
  118. %   will include the number {\tt 329}.
  119. %
  120. % |proofing|: says whether to put additional specials in the GF file for
  121. %   use in making proofsheets with the assistance of, e.g., the utility
  122. %   program {\tt GFtoDVI} (page 323--4).
  123. % |tracingtitles|: if nonzero, strings that appear as \MF\ statements
  124. %   are typed on the terminal (page 187).
  125. % Neenie Billawala's article in the April 1987 issue of {\sl TUGboat}
  126. % describes how to test your printer for the best set of values for the
  127. % magic numbers above.  Here are some brief comments on the subject,
  128. % courtesy of {\tt rocky@ibm.com}, again edited by Karl:
  129. % For medium-to-low resolution devices, you can first set the |blacker|
  130. % and |o_correction| to~0 and decide on a |fillin| value by looking at
  131. % the diagonal of a lowercase `z' in the typewriter font. The diagonal
  132. % should be the same thickness as the horizontal bars of the `z'. Then I
  133. % decide on the |blacker| value, generally by checking the smaller fonts
  134. % for too much filling in.  Finally, you can set the |o_correction|
  135. % using the guidelines suggested above.
  136. %"
  137. % }
  138.  
  139. % Identify ourselves in the format file.
  140. base_version := base_version & "/modes 0.7";
  141.  
  142.  
  143. % Here are useful macros (also called definitions) that we will use
  144. % throughout.
  145.  
  146. % First, some comments about how the |mode_defs| are constructed (from
  147. % {\tt rocky@ibm.com}).  In the past, |mode_defs| unconditionally
  148. % assigned a value to the various mode-dependent parameters. For
  149. % example, they contained an assignment |fontmaking:=1|, which tells
  150. % \MF\ to write a TFM file.
  151. %
  152. % But suppose you want to generate a font using all of the setup for
  153. % some mode |m|, but just do not want to generate a tfm? One could
  154. % create another mode that doesn't have the assignment, but this seems a
  155. % bit wasteful since the rest of the code in the mode would be
  156. % duplicated.  Furthermore, given the way the mode definitions were
  157. % written, it was not possible to change the mode parameters.  To see
  158. % why, I review how a \MF run typically works.
  159. %
  160. % First, \MF is invoked with some base file to load.  Then you might
  161. % want give additional instructions, such as |scrollmode|, or |mode:=m|.
  162. % Next, you input a parameter file, say {\tt cmr10}.  The parameter file
  163. % calls a driver file, such as {\tt roman}, with the command |generate
  164. % roman|.  Finally, the driver finished by saying |bye| or |end|.  Thus,
  165. % any additional commands you give after the input of the parameter file
  166. % are ignored.
  167. %
  168. % Usually, one of the first things a driver file does is to call
  169. % |mode_setup|. It is here that the mode parameters are set.  (In our
  170. % hypothetical mode, it would be here that |fontmaking| is assigned.)
  171. %
  172. % To allow a flexible setting of |fontmaking|, we can make a simple
  173. % change: in the |mode_def|, first test to see if a value has been
  174. % defined prior and only make the assignment if not. That is:
  175. % |if unknown fontmaking: fontmaking := 1; fi|.
  176. %
  177. % Alas, this doesn't work.  Primitives, like |fontmaking|, are always
  178. % |known|.  So instead we create ``guard'' variables, e.g.,
  179. % |mode_guard_.fontmaking|; we set the guard variable when we assign the
  180. % parameter.  Then we test whether the guard variable is |known| before
  181. % we actually do an assignment.
  182. % This allows more flexible definitions: you can specify some of the
  183. % parameters, and keep the default value for others.
  184. %
  185. % It is also possible to write a program that creates a |mode_def| on
  186. % the fly. Although useful, this has a slightly different focus than
  187. % starting with an existing |mode_def| and changing a couple of
  188. % parameters. In particular, one still has to peek inside the
  189. % file to see what the old values were and set them again (in the
  190. % new context). Also, such on-the-fly |mode_def| generation programs are
  191. % inherently less machine-independent that a scheme that does
  192. % everything in \MF\ itself.
  193. %
  194. % The upshot of all this is the following definition:  we say, e.g.,
  195. % |mode_param (fontmaking, 1)| below, instead of doing a real
  196. % assignment.  The name (``|mode_param|'') is kept short because you
  197. % also use this to override a mode assignment, on the command line or in
  198. % response to the {\tt **} prompt.
  199. def mode_param (suffix v) (expr e) =
  200.   if unknown mode_guard_.v:
  201.     v := e;
  202.     mode_guard_.v := 1;
  203.   fi
  204. enddef;
  205.  
  206. % This macro is invoked by all the modes, after |pixels_per_inch|
  207. % has been defined, thus saving some space and time.
  208. def mode_common_setup_ =
  209.   mode_param (proofing, 0);
  210.   mode_param (fontmaking, 1);
  211.   mode_param (tracingtitles, if pixels_per_inch > 700: 1 else: 0 fi);
  212. enddef;
  213.  
  214.  
  215. % In a similar spirit, here are definitions to change to ``landscape''
  216. % mode.  You just say {\tt mode := whatever; landscape; ...}, and when
  217. % |mode_setup| is executed, the |aspect_ratio| will be inverted, and
  218. % |pixels_per_inch| changed.
  219. def landscape =
  220.   extra_setup := extra_setup & "landscape_;"
  221. enddef;
  222.  
  223. def landscape_ =
  224.   begingroup
  225.     interim warningcheck := 0;
  226.     pixels_per_inch := aspect_ratio * pixels_per_inch;
  227.     aspect_ratio := 1 / aspect_ratio;
  228.   endgroup
  229. enddef;
  230.  
  231.  
  232. % Here are macros to add specials with mode information to the GF file.
  233. % Specifically, we add the |pixels_per_inch|, |o_correction|,
  234. % |aspect_ratio| (if not 1), |mag|, |fillin|, and |mode_def| name.  This
  235. % information can be used to automatically verify that a font file name
  236. % matches the specification within the file.  For example, you could
  237. % check that the number in the filename matches |mag*pixels_per_inch|.
  238. % Or, if the |mode_def| name is is put in the font directory path (e.g.,
  239. % you put fonts in {\tt $\ldots$/tex/fonts/CanonCX}), that all of the
  240. % bitmap files in the directory have the expected |mode_def| name.
  241.  
  242. def mode_special_ (suffix $) =
  243.   string s, d;
  244.   s := str $;
  245.   d := decimal scantokens s;
  246.   special s & " := " & d & ";"
  247. enddef;
  248.  
  249. def mode_output_specials_ =
  250.   begingroup
  251.     save d, s, p, p_p_i;
  252.     string p;
  253.  
  254.     interim warningcheck := 0; % In case |pixels_per_inch>4096|.
  255.  
  256.     % We need the old |pixels_per_inch| to compute the true device
  257.     % resolution.
  258.     p_p_i = pixels_per_inch / mag;
  259.  
  260.     % But now we want to change |pixels_per_inch|, so we |save| the
  261.     % old value.
  262.     save pixels_per_inch;
  263.     pixels_per_inch := p_p_i;
  264.  
  265.     special jobname;
  266.     mode_special_ (mag);
  267.  
  268.     p := if string mode:
  269.            mode
  270.          else:
  271.            substring (0, length (mode_name[mode]) - 1) of mode_name[mode]
  272.          fi;
  273.     special "mode := " & p & ";";
  274.  
  275.     mode_special_ (pixels_per_inch);
  276.     if aspect_ratio <> 1:
  277.       mode_special_ (aspect_ratio);
  278.     fi;
  279.     mode_special_ (blacker);
  280.     mode_special_ (fillin);
  281.     mode_special_ (o_correction);
  282.   endgroup
  283. enddef;
  284.  
  285.  
  286. % Here are macros for Xerox-world font info, which can be useful even
  287. % if you never use a Xerox printer.  For instance, {\tt crudetype} uses
  288. % the |coding_scheme| and it is nice to have the font family on record.
  289. % This goes into both the TFM file (as |headerbyte| information), and
  290. % into the GF file, with |special|.
  291.  
  292. % Make the string |s| be |n| bytes long.
  293. def BCPL_string (expr s, n) =
  294.   for l := if length (s) >= n: n-1 else: length (s) fi: l
  295.     for k := 1 upto l: , substring (k - 1, k) of s endfor
  296.     for k := l + 2 upto n: , 0 endfor
  297.   endfor
  298. enddef;
  299.  
  300. % The string |s| names the encoding scheme, e.g., {\tt TeX TEXT}.
  301. def coding_scheme expr s =
  302.   headerbyte 9: BCPL_string (s, 40);
  303.   special "codingscheme " & s
  304. enddef;
  305.  
  306. % The string |s| names the font family, e.g., {\tt CMR}.
  307. def font_family expr s =
  308.   headerbyte 49: BCPL_string (s, 20);
  309.   special "identifier " & s
  310. enddef;
  311.  
  312. % The integer |x| gives the family member number, which should be
  313. % between 0 and 255.
  314. def font_face_byte expr x =
  315.   headerbyte 72: x;
  316.   special "fontfacebyte";
  317.   numspecial x
  318. enddef;
  319.  
  320. % So users can say |if known Xerox_world: $\ldots$ fi|
  321. Xerox_world := 1;
  322.  
  323.  
  324. % Redefine |end| to put the extra information above in the GF and TFM
  325. % files.  This code is based on that on page 321.
  326. inner end;
  327. let primitive_end_ = end;
  328. def end =
  329.   if fontmaking > 0:
  330.     font_family font_identifier_;
  331.     coding_scheme font_coding_scheme_;
  332.     font_face_byte max (0, 254 - round 2designsize); 
  333.     mode_output_specials_;
  334.   fi;
  335.   primitive_end_.
  336. enddef;
  337.  
  338. % The {\sl \MF book} gives |bye| two different definitions (on pages 278
  339. % and 321). The first is used in {\tt plain.mf} and is merely a synoynym
  340. % for the primitive |end|.  The second, which is not part of {\tt
  341. % plain.mf}, is similar to the code given above. We want the extra
  342. % information to get into the output files regardless of whether the
  343. % \MF\ source used |end| or |bye|.  The above changed |end|; now we have
  344. % to redefine |bye| again (as on page 278).
  345. outer end, primitive_end_;
  346. let bye = end;
  347.  
  348.  
  349. % Here are macros to handle write-white printers.
  350. %
  351. % The basic correction for write-white fonts occurs in the definition of
  352. % |font_setup|.  This can be used to extend or change the write-black
  353. % definition in Computer Modern's {\tt cmbase.mf} or other base files
  354. % based on CM, such as {\tt dxbase.mf}.
  355. %
  356. def mode_write_white_setup_ =
  357.   begingroup
  358.     let black_setup = font_setup;
  359.     def font_setup =
  360.       black_setup;
  361.       min_Vround:=max(fine.breadth,crisp.breadth,tiny.breadth,2);
  362.       if min_Vround<vround min_Vround: min_Vround:=vround min_Vround; fi
  363.       if flare<vround flare: flare:=vround flare; fi
  364.       forsuffixes $=vair,bar,slab,cap_bar,cap_band,vair',vstem,cap_vstem,bold:
  365.         if $<min_Vround: $:=min_Vround; fi endfor
  366.       forsuffixes $=thin_join,hair,curve,flare,dot_size,cap_hair,cap_curve,
  367.        vair,bar,slab,cap_bar,cap_band,stem',cap_stem',vair',fudged.hair,
  368.        fudged.stem,fudged.cap_stem: $:=max($,2); endfor
  369.     enddef;
  370.   endgroup
  371. enddef;
  372.  
  373.  
  374. % Here are the modes, given in alphabetical order (without regard to case).
  375.  
  376. % From {\tt cudat@cu.warwick.ac.uk}.
  377. mode_def AgfaFourZeroZero =             % AGFA 400PS
  378.   mode_param (pixels_per_inch, 406);
  379.   mode_param (blacker, .2);
  380.   mode_param (fillin, 0);
  381.   mode_param (o_correction, .6);
  382.   mode_common_setup_;
  383. enddef;
  384.  
  385. % From {\tt rokicki@neon.stanford.edu}.
  386. mode_def amiga =                        % Commodore Amiga.
  387.   mode_param (pixels_per_inch, 100);
  388.   mode_param (blacker, 0);
  389.   mode_param (fillin, 0);
  390.   mode_param (o_correction, .2);
  391.   mode_common_setup_;
  392. enddef;
  393.  
  394. % From {\tt ee@dacth51.bitnet}.
  395. mode_def AtariSLMEightZeroFour =        % Atari ST SLM 804 printer
  396.   mode_param (pixels_per_inch, 300);
  397.   mode_param (blacker, -.25);
  398.   mode_param (fillin, .5);
  399.   mode_param (o_correction, 0);
  400.   mode_common_setup_;
  401.   mode_write_white_setup_;
  402. enddef;
  403.  
  404. % From {\tt ee@dacth51.bitnet}.
  405. mode_def AtariSMOneTwoFour =            % Atari ST SM 124 screen
  406.   mode_param (pixels_per_inch, 101);
  407.   mode_param (blacker, 0);
  408.   mode_param (fillin, 0);
  409.   mode_param (o_correction, .4);
  410.   mode_common_setup_;
  411. enddef;
  412.  
  413. mode_def aps =                          % Autologic APS-Micro5
  414.   mode_param (pixels_per_inch, 722.909);
  415.   mode_param (blacker, .2);
  416.   mode_param (fillin, .2);
  417.   mode_param (o_correction, 1);
  418.   mode_common_setup_;
  419. enddef;
  420.  
  421. % From {\tt rocky@ibm.com}.  Tested on the single APS-6 at IBM
  422. % Research.
  423. mode_def ApsSixHi =                     % Autologic APS-Micro6
  424.   mode_param (pixels_per_inch, 1016);
  425.   mode_param (blacker, 0);
  426.   mode_param (fillin, 0);
  427.   mode_param (o_correction, 1);
  428.   mode_common_setup_;
  429. enddef;
  430.  
  431. mode_def bitgraph =                     % BBN Bitgraph at 118dpi
  432.   mode_param (pixels_per_inch, 118);
  433.   mode_param (blacker, .55);
  434.   mode_param (fillin, .1);
  435.   mode_param (o_correction, .3);
  436.   mode_common_setup_;
  437. enddef;
  438.  
  439. mode_def boise =                        % HP 2680A
  440.   mode_param (pixels_per_inch, 180);
  441.   mode_param (blacker, .55);
  442.   mode_param (fillin, .1);
  443.   mode_param (o_correction, .3);
  444.   mode_common_setup_;
  445. enddef;
  446.  
  447. % This applies to the LaserWriter Plus, HP Laserjet, HP Laserjet Plus,
  448. % and also the Canon LBP-LX engine, in the Laserjet IIP, QMS 410, and
  449. % Apple Personal LaserWriter.
  450. mode_def CanonCX =                      % e.g., Apple LaserWriter
  451.   mode_param (pixels_per_inch, 300);
  452.   mode_param (blacker, 0);
  453.   mode_param (fillin, .2);
  454.   mode_param (o_correction, .6);
  455.   mode_common_setup_;
  456. enddef;
  457. cx := CanonCX;
  458. corona := CanonCX;
  459. dp := CanonCX; % some kind of DataProducts
  460. imagen := CanonCX;
  461. laserwriter := CanonCX;
  462. % I have seen a |mode_def| that claimed the LaserJet II was the Canon SX
  463. % write-white engine, but I don't think that's right.
  464. laserjethi := CanonCX;
  465. laserjet := CanonCX;
  466.  
  467. mode_def CanonLBPTen =                  % e.g., Symbolics LGP-10
  468.   mode_param (pixels_per_inch, 240);
  469.   mode_param (blacker, .2);
  470.   mode_param (fillin, .2);
  471.   mode_param (o_correction, .4);
  472.   mode_common_setup_;
  473. enddef;
  474.  
  475. mode_def CanonSX =                      % Canon SX
  476.   mode_param (pixels_per_inch, 300);
  477.   mode_param (blacker, .2);
  478.   mode_param (fillin, -.2);
  479.   mode_param (o_correction, .5);
  480.   mode_common_setup_;
  481.   mode_write_white_setup_;
  482. enddef;
  483.  
  484. % The Chelgraph IBX is the machine introduced to North American \TeX\
  485. % users by Type~2000 in Mill Valley, California; telephone
  486. % (415)~388-8873.  Since the machine's stated output resolution is only
  487. % 2000\thinspace dpi this truly spectacular 9600\thinspace dpi must be
  488. % used for translation to an outline font description.  This
  489. % |mode_def| has been tested and used in a publication of the University
  490. % of Washington Press.  These values from Pierre MacKay, based on Lance
  491. % Carnes' crs values, at magstep~1.8.
  492. mode_def ChelgraphIBX =                 % Chelgraph IBX
  493.   mode_param (pixels_per_inch, 4000 + 4000 + 1600);
  494.   mode_param (blacker, 4);
  495.   mode_param (fillin, 0);
  496.   mode_param (o_correction, 1);
  497.   mode_common_setup_;
  498. enddef;
  499.  
  500. % From {\tt rokicki@cs.umb.edu}.
  501. mode_def CItohThreeOneZero =            % CItoh 310
  502.   mode_param (pixels_per_inch, 240);
  503.   mode_param (aspect_ratio, 144 / pixels_per_inch);
  504.   mode_param (blacker, 0);
  505.   mode_param (fillin, 0);
  506.   mode_param (o_correction, .2);
  507.   mode_common_setup_;
  508. enddef;
  509. cthreeten := CItohThreeOneZero;
  510.  
  511. mode_def CompugraphicEightSixZeroZero = % Compugraphic 8600
  512.   mode_param (pixels_per_inch, 1301.5);
  513.   mode_param (aspect_ratio, 1569 / pixels_per_inch);
  514.   mode_param (blacker, .2);
  515.   mode_param (fillin, .2);
  516.   mode_param (o_correction, 1);
  517.   mode_common_setup_;
  518. enddef;
  519. cg := CompugraphicEightSixZeroZero;
  520.  
  521. % This has a resolution of |5333 + 1/3| pixels per inch.
  522. mode_def crs =                          % Alphatype CRS
  523.   mode_param (pixels_per_inch, 4000 + 4000/3);
  524.   mode_param (blacker, 4); 
  525.   mode_param (fillin, 0);
  526.   mode_param (o_correction, 1);
  527.   mode_common_setup_;
  528. enddef;
  529.  
  530. % At least magstep 2 is recommended at this low resolution.
  531. mode_def DataDisc =                     % DataDisc
  532.   mode_param (pixels_per_inch, 70);
  533.   mode_param (blacker, 0);
  534.   mode_param (fillin, 0);
  535.   mode_param (o_correction, .2);
  536.   mode_common_setup_;
  537. enddef;
  538. DD := DataDisc;
  539.  
  540. mode_def DataDiscNew =                  % DataDisc with special aspect ratio
  541.   DataDisc_;
  542.   mode_param (aspect_ratio, 4/3);
  543. enddef;
  544. newDD := DataDiscNew;
  545.  
  546. mode_def dover =                        % Xerox Dover
  547.   mode_param (pixels_per_inch, 384);
  548.   mode_param (blacker, 1.2);
  549.   mode_param (fillin, 0);
  550.   mode_param (o_correction, .6);
  551.   mode_common_setup_;
  552. enddef;
  553.  
  554. % These values from Charles Karney, {\sl TUGboat} 8(2), page 133.  This
  555. % is for the Epson MX/FX family (-85, -286), which are 9-pin printers.
  556. % The 24-pin LQ family have higher resolutions; no one has sent me
  557. % |mode_def|s for them yet.  Ditto for Epson's laser printer.  (Thanks
  558. % to {\tt cargo@escargot.cray.com} for all this information.)
  559. mode_def EpsonMXFX =                    % 9-pin Epson MX/FX family
  560.   mode_param (pixels_per_inch, 240);
  561.   mode_param (aspect_ratio, 216 / pixels_per_inch);
  562.   mode_param (blacker, 0);
  563.   mode_param (fillin, 0);
  564.   mode_param (o_correction, .2);
  565.   mode_common_setup_;
  566. enddef;
  567. epson := EpsonMXFX;
  568. epshi := EpsonMXFX;
  569.  
  570. % Perhaps this should be 120 horizontally and 216 vertically, if it is
  571. % for the MX-80.  Or it could be a draft mode for the FX-80.  The
  572. % situation is unclear.
  573. mode_def epsonlo =                      % Epson at 120dpi
  574.   EpsonMXFX_;
  575.   mode_param (pixels_per_inch, 120);
  576.   mode_param (aspect_ratio, 144 / pixels_per_inch);
  577. enddef;
  578. epslo := epsonlo;
  579.  
  580. % From {\tt drstrip@intvax.uucp}.
  581. mode_def GThreefax =                    % 200 x 100dpi G3fax
  582.   mode_param (pixels_per_inch, 200);
  583.   mode_param (aspect_ratio, 100 / pixels_per_inch);
  584.   mode_param (blacker, 0);
  585.   mode_param (fillin, .2);
  586.   mode_param (o_correction, .2);
  587.   mode_common_setup_;
  588. enddef;
  589.  
  590. % From {\tt fieberjr@whitman.bitnet}.
  591. mode_def HPDeskJet =                    % HP DeskJet 500
  592.   mode_param (pixels_per_inch, 300);
  593.   mode_param (blacker, 0);
  594.   mode_param (fillin, 0);
  595.   mode_param (o_correction, .6);
  596.   mode_common_setup_;
  597. enddef;
  598.  
  599. % Here are some general comments on the IBM printers, courtesy of {\tt
  600. % rocky@ibm.com}.
  601. % IBM 3820's, 3825's, 3827's and 3835's have some sort of corner imaging
  602. % or shading that the IBM 3812's and 3816's don't.  The latter two
  603. % models may get this feature in the future.
  604. %
  605. % The IBM 3827 is made by Kodak, the rest are IBM engines.
  606. %
  607. % Some of the other printers have a knob that allows a service engineer
  608. % to set one of up to ten levels of darkness.  At IBM Research, we run
  609. % very black.  The service engineer sets the level by running a
  610. % completely black page and then two completely blank ones. The black
  611. % page must be black and the following two must be completely white.
  612. %
  613. % Thanks to Jim Hafner ({\tt hafner@ibm.com}) for experimenting with
  614. % |blacker|, and Paul Dantzig for information about these printers.
  615.  
  616. % From {\tt rocky@ibm.com}.  For the typewriter, slanted, and
  617. % italic fonts, |blacker=0| makes the `M's and `W's more legible.  But
  618. % then the weight of the font does not match the others.
  619. mode_def IBMD =                         % IBM 38xx
  620.   mode_param (pixels_per_inch, 240);
  621.   mode_param (blacker, .3);
  622.   mode_param (fillin, .4);
  623.   mode_param (o_correction, .75);
  624.   mode_common_setup_;
  625. enddef;
  626.  
  627. % From {\tt vumalki\%weizmann.weizmann.ac.il@taunivm.tau.ac.il}.
  628. mode_def IBMFourTwoFiveZero =           % IBM 4250
  629.   mode_param (pixels_per_inch, 600);
  630.   mode_param (blacker, .05);
  631.   mode_param (fillin, 0);
  632.   mode_param (o_correction, .6);
  633.   mode_common_setup_;
  634. enddef;  
  635.  
  636. % From {\tt Martin.Ward@durham.ac.uk}.  Apparently the engine is
  637. % different from the Ricoh 4080.  With a larger value of |blacker|,
  638. % characters like the `e' in {\tt cmtt8} look bad.
  639. mode_def IBMFourTwoOneSix =             % IBM 4216
  640.   mode_param (pixels_per_inch, 300);
  641.   mode_param (blacker, .2);
  642.   mode_param (fillin, 0);
  643.   mode_param (o_correction, .75);
  644.   mode_common_setup_;
  645.   mode_write_white_setup_;
  646. enddef;
  647. RicohA := IBMFourTwoOneSix;
  648.  
  649. % From {\tt rocky@ibm.com}.  This is an old, untested definition.
  650. mode_def IBMSixSixSevenZero =           % IBM 6670 (Sherpa)
  651.   mode_param (pixels_per_inch, 240);
  652.   mode_param (blacker, 1);
  653.   mode_param (fillin, 1);
  654.   mode_param (o_correction, .5);
  655.   mode_common_setup_;
  656.   mode_write_white_setup_;
  657. enddef;
  658. Sherpa := IBMSixSixSevenZero;
  659.  
  660. % From {\tt vumalki\%weizmann.weizmann.ac.il@taunivm.tau.ac.il}.
  661. mode_def IBMThreeEightOneTwo =          % IBM 3812
  662.   mode_param (pixels_per_inch, 240);
  663.   mode_param (blacker, .6);
  664.   mode_param (fillin, .4);
  665.   mode_param (o_correction, 0);
  666.   mode_common_setup_;
  667.   mode_write_white_setup_;
  668. enddef;
  669. IBMUlfHolleberg := IBMThreeEightOneTwo;
  670.  
  671. % These values from {\tt d\_webb@chcc.harwell.aea-technology.uk}.
  672. mode_def IBMThreeEightTwoZero =         % IBM 3820
  673.   mode_param (pixels_per_inch, 240);
  674.   mode_param (blacker, .78);
  675.   mode_param (fillin, .25);
  676.   mode_param (o_correction, .5);
  677.   mode_common_setup_;
  678. enddef;
  679.  
  680. % These values from {\tt d\_webb@chcc.harwell.aea-technology.uk}.
  681. mode_def IBMVGA =                       % IBM VGA monitor
  682.   mode_param (pixels_per_inch, 110);
  683.   mode_param (blacker, .3);
  684.   mode_param (fillin, 0);
  685.   mode_param (o_correction, 0);
  686.   mode_common_setup_;
  687. enddef;
  688.  
  689. % Perhaps the value for |fillin| should be 0.
  690. mode_def imagewriter =                  % Apple ImageWriter
  691.   mode_param (pixels_per_inch, 144);
  692.   mode_param (blacker, 0);
  693.   mode_param (fillin, 0.3);
  694.   mode_param (o_correction, .2);
  695.   mode_common_setup_;
  696. enddef;
  697. iw := imagewriter;
  698.  
  699. % From {\tt ST-TeX.MF} via {\tt braams@pttrnl.nl}.  (The 300dpi LaserJet
  700. % is another |CanonCX|.)
  701. mode_def laserjetlo =                   % HP LaserJet at 150dpi
  702.   mode_param (pixels_per_inch, 150);
  703.   mode_param (blacker, 0);
  704.   mode_param (o_correction, 1);
  705.   mode_param (fillin, .1);
  706.   mode_common_setup_;
  707. enddef;
  708.  
  709. % From John Sauter.
  710. mode_def LASevenFive =                  % DEC LA75
  711.   mode_param (pixels_per_inch, 144);
  712.   mode_param (blacker, .3);
  713.   mode_param (fillin, -.1);
  714.   mode_param (o_correction, 0);
  715.   mode_common_setup_;
  716. enddef;
  717.  
  718. mode_def LinotypeOneZeroZeroLo =        % Linotype Linotronic [13]00 at 635dpi
  719.   LinotypeOneZeroZero_;
  720.   mode_param (pixels_per_inch, 635);
  721. enddef;
  722. linolo := LinotypeOneZeroZeroLo;
  723. linohalf := LinotypeOneZeroZeroLo;
  724.  
  725. % These values from {\tt d\_webb@chcc.harwell.aea-technology.uk}.  The
  726. % `a' in {\tt cmr5} looks better with |blacker=.3|.  Values of .2 for
  727. % both |blacker| and |fillin| have also been used.
  728. mode_def LinotypeOneZeroZero =          % Linotype Linotronic [13]00 at 1270dpi
  729.   mode_param (pixels_per_inch, 1270);
  730.   mode_param (blacker, .65);
  731.   mode_param (fillin, -.1);
  732.   mode_param (o_correction, .5);
  733.   mode_common_setup_;
  734.   mode_write_white_setup_;
  735. enddef;
  736. linoone := LinotypeOneZeroZero;
  737. linohi := LinotypeOneZeroZero;
  738. linothreelo := LinotypeOneZero;
  739.  
  740. % These values from {\tt d\_webb@chcc.harwell.aea-technology.uk}.
  741. mode_def LinotypeThreeZeroZeroHi =      % Linotype Linotronic 300 at 2540dpi
  742.   mode_param (pixels_per_inch, 2540);
  743.   mode_param (blacker, .2);                % Copied from |aps|---conjectural.
  744.   mode_param (fillin, .2);                 % (ditto)
  745.   mode_param (o_correction, 1);            % (ditto)
  746.   mode_common_setup_;
  747. enddef;
  748. linothree := LinotypeThreeZeroZero;
  749. linosuper := LinotypeThreeZeroZero;
  750.  
  751. % From Richard Watson at the Queensland Institute of Technology.  This
  752. % printer is said to have some kind of Xerox engine, but I don't know
  753. % which.
  754. mode_def LNZeroOne =                    % DEC LN01
  755.   mode_param (pixels_per_inch, 300);
  756.   mode_param (blacker, .9);
  757.   mode_param (fillin, 0);
  758.   mode_param (o_correction, .5);
  759.   mode_common_setup_;
  760. enddef;
  761.  
  762. % These values from {\tt karl@cs.umb.edu}.  |blacker = .8| or more
  763. % thickens dots, to their detriment.  |blacker = .6| produces two-pixel
  764. % stems, which looks pretty good for {\tt cmr}, but it's a little dark
  765. % for {\tt cmti}, and {\tt cmbx} and {\tt cmr} then turn out the same.
  766. % |o_correction = 1| made no difference.  |fillin = 1| made no
  767. % difference.
  768. mode_def lview =                        % Sigma L-View monitor
  769.   mode_param (pixels_per_inch, 118.06);
  770.   mode_param (aspect_ratio, 109.25 / pixels_per_inch);
  771.   mode_param (blacker, 0);
  772.   mode_param (fillin, 0);
  773.   mode_param (o_correction, 0);
  774.   mode_common_setup_;
  775. enddef;
  776.  
  777. % This |mode_def| is untested.
  778. mode_def MacMagnified =                 % Mac screens at magstep 1
  779.   mode_param (pixels_per_inch, 86.4);
  780.   mode_param (blacker, .35);
  781.   mode_param (fillin, .1);
  782.   mode_param (o_correction, .3);
  783.   mode_common_setup_;
  784. enddef;
  785. bettermac := MacMagnified;
  786.  
  787. % From the VMS distribution tape (except {\tt karl@cs.umb.edu} changed
  788. % the |o_correction| to zero).
  789. mode_def MacTrueSize =                  % Mac screens at 72dpi
  790.   mode_param (pixels_per_inch, 72);
  791.   mode_param (blacker, .0);
  792.   mode_param (fillin, 0);
  793.   mode_param (o_correction, 0);
  794.   mode_common_setup_;
  795. enddef;
  796. truemac := MacTrue;
  797.  
  798. % From {\tt rokicki@neon.stanford.edu}.
  799. mode_def NEC =                          % NEC
  800.   mode_param (pixels_per_inch, 180);
  801.   mode_param (blacker, 0);
  802.   mode_param (fillin, 0);
  803.   mode_param (o_correction, .2);
  804.   mode_common_setup_;
  805. enddef;
  806.  
  807. % This is the same as |CanonCX|, except for the resolution.
  808. mode_def NEChi =                        % NEC at 360dpi
  809.   CanonCX_;
  810.   mode_param (pixels_per_inch, 360);
  811. enddef;
  812.  
  813. % From {\tt lambert@silver.cs.umanitoba.ca}.
  814. mode_def Newgen =                       % Newgen 400dpi
  815.   CanonSX_;
  816.   mode_param (pixels_per_inch, 400);
  817. enddef;
  818.  
  819. % From {\tt rokicki@neon.stanford.edu}.
  820. mode_def NeXTprinter =                  % NeXT 400dpi
  821.   CanonCX_;
  822.   mode_param (pixels_per_inch, 400);
  823. enddef;
  824. nexthi := NeXTprinter;
  825.  
  826. % From {\tt rokicki@neon.stanford.edu}.
  827. mode_def NeXTscreen =                   % 100dpi NeXT monitor
  828.   mode_param (pixels_per_inch, 100);
  829.   mode_param (blacker, 0);
  830.   mode_param (fillin, 0);
  831.   mode_param (o_correction, 0);
  832.   mode_common_setup_;
  833. enddef;
  834. nextscreen := NeXTscreen;
  835.  
  836. % From {\tt deby@cs.utwente.nl}.
  837. mode_def OCESixSevenFiveZeroPS =        % OCE 6750PS
  838.   mode_param (pixels_per_inch, 508);
  839.   mode_param (blacker, 0);
  840.   mode_param (fillin, -.2);
  841.   mode_param (o_correction, .7);
  842.   mode_common_setup_;
  843. enddef;
  844.  
  845. % From {\tt rokicki@neon.stanford.edu}.
  846. mode_def okidata =                      % Okidata
  847.   mode_param (pixels_per_inch, 240);
  848.   mode_param (blacker, 0);
  849.   mode_param (fillin, 0);
  850.   mode_param (o_correction, .2);
  851.   mode_param (aspect_ratio, 288 / pixels_per_inch);
  852.   mode_common_setup_;
  853. enddef;
  854. okihi := okidata;
  855.  
  856. % {\tt AMSmodes.def} defines |pcscreen| to be essentially this, but with
  857. % a resolution of 118.  I figured |pcscreen| was such a general name
  858. % that I could change the definition slightly.
  859. mode_def OneTwoZero =                   % e.g., high-resolution Suns
  860.   mode_param (pixels_per_inch, 120);
  861.   mode_param (blacker, .35);
  862.   mode_param (fillin, .1);
  863.   mode_param (o_correction, .3);
  864.   mode_common_setup_;
  865. enddef;
  866. pcscreen := OneTwoZero;
  867.  
  868. % This is a write-white PostScript laser-setter, made by a Xerox
  869. % subsidiary.  It has a bizarre nonsquare resolution.  Headquarters in
  870. % Minnesota; telephone: (612) 456-1400.  At this resolution, the
  871. % write-white correction may not matter, but it is safer to turn it on
  872. % anyway.  This |mode_def| not yet tested in production.
  873. mode_def PrintwareSevenTwoZeroIQ =      % Printware 720IQ
  874.   mode_param (pixels_per_inch, 1200);
  875.   mode_param (aspect_ratio, 600 / pixels_per_inch);
  876.   mode_param (blacker, 0);
  877.   mode_param (fillin, 0);
  878.   mode_param (o_correction, 1);
  879.   mode_common_setup_;
  880.   mode_write_white_setup_;
  881. enddef;
  882.  
  883. % From John Gourlay.  See {\sl TUGboat} 8(2), page 133.
  884. mode_def qms =                          % QMS (Xerox engine)
  885.   mode_param (pixels_per_inch, 300);
  886.   mode_param (blacker, .6);
  887.   mode_param (fillin, -.3);
  888.   mode_param (o_correction, .6);
  889.   mode_common_setup_;
  890. enddef;
  891.  
  892. % These values from Stan Osborne, {\sl TUGboat} 8(2), page 134.
  893. mode_def RicohFourZeroEightZero =       % e.g., the TI Omnilaser
  894.   mode_param (pixels_per_inch, 300);
  895.   mode_param (blacker, .2);
  896.   mode_param (fillin, -.2);
  897.   mode_param (o_correction, .5);
  898.   mode_common_setup_;
  899.   mode_write_white_setup_;
  900. enddef;
  901. ricoh := RicohFourZeroEightZero;
  902. RicohFortyEighty := RicohFourZeroEightZero;
  903.  
  904. % From John Sauter.
  905. mode_def RicohLP =                      % e.g., the DEC LN03
  906.   mode_param (pixels_per_inch, 300);
  907.   mode_param (blacker, .65);
  908.   mode_param (fillin, -.2);
  909.   mode_param (o_correction, .5);
  910.   mode_common_setup_;
  911.   mode_write_white_setup_;
  912. enddef;
  913. LNOthree := RicohLP;
  914. LNZeroThree := RicohLP;
  915.  
  916. % From {\tt dickson@eeserv.ee.umanitoba.ca}.  {\tt gil.cc.gatech.edu}
  917. % has different values.
  918. mode_def SparcPrinter =                 % Sun SPARCprinter
  919.   mode_param (pixels_per_inch, 400);
  920.   mode_param (blacker, .2);
  921.   mode_param (fillin, .3);
  922.   mode_param (o_correction, 1);
  923.   mode_common_setup_;
  924. enddef;
  925.  
  926. % From {\tt ee@dacth51.bitnet}.
  927. mode_def StarNLOneZero =                % Star NL-10
  928.   mode_param (pixels_per_inch, 240);
  929.   mode_param (aspect_ratio, 216 / pixels_per_inch);
  930.   mode_param (blacker, -.6);
  931.   mode_param (fillin, .2);
  932.   mode_param (o_correction, .4);
  933.   mode_common_setup_;
  934. enddef;
  935.  
  936. % From {\tt grunwald@foobar.colorado.edu}.  Sun monitors have several
  937. % different resolutions, but this seems the best choice of the lot.
  938. mode_def sun =                          % Sun and BBN Bitgraph at 85dpi
  939.   mode_param (pixels_per_inch, 85);
  940.   mode_param (blacker, .35);
  941.   mode_param (fillin, .1);
  942.   mode_param (o_correction, .3);
  943.   mode_common_setup_;
  944.   enddef;
  945.  
  946. mode_def supre =                        % Ultre*setter at 2400dpi
  947.   mode_param (pixels_per_inch, 2400);
  948.   mode_param (blacker, 0);
  949.   mode_param (fillin, 0);
  950.   mode_param (o_correction, 1);
  951.   mode_common_setup_;
  952. enddef;
  953.  
  954. mode_def toshiba =                      % Toshiba 13XX, EpsonLQ
  955.   mode_param (pixels_per_inch, 180);
  956.   mode_param (blacker, 0);
  957.   mode_param (fillin, 0);
  958.   mode_param (o_correction, .2);
  959.   mode_common_setup_;
  960. enddef;
  961. epsonlq := toshiba;
  962.  
  963. mode_def ultre =                        % Ultre*setter at 1200dpi
  964.   mode_param (pixels_per_inch, 1200);
  965.   mode_param (blacker, 0);
  966.   mode_param (fillin, 0);
  967.   mode_param (o_correction, 1);
  968.   mode_common_setup_;
  969. enddef;
  970.  
  971. % From {\tt rocky@watson.ibm.com}.  This can also be used for the
  972. % Autologic's APS6 cut sheet dry process printer.  For that printer,
  973. % perhaps |blacker=0.8| is better. For the Varityper, though, at
  974. % |blacker=0.8| the dots of the umlaut start to fill in.  For
  975. % |blacker<0.6|, the tops and bottoms of lowercase g's and s's in {\tt
  976. % cmr5} drop out.
  977. mode_def VarityperFiveZeroSixZeroW =
  978.   mode_param (pixels_per_inch, 600);
  979.   mode_param (blacker, .7);
  980.   mode_param (fillin, 0);
  981.   mode_param (o_correction, 1);
  982.   mode_common_setup_;
  983. enddef;
  984. APSSixMed := VarityperFiveZeroSixZeroW;
  985.  
  986. % The worst problem is toner irregularity.
  987. mode_def VarityperSixZeroZero =         % Varityper Laser 600
  988.   mode_param (pixels_per_inch, 600);
  989.   mode_param (blacker, 0);
  990.   mode_param (fillin, 0);
  991.   mode_param (o_correction, 1);
  992.   mode_common_setup_;
  993. enddef;
  994. varityper := VarityperSixZeroZero;
  995. VTSix := VarityperSixZeroZero;
  996.  
  997. % From {\tt Martin.Ward@durham.ac.uk}.  
  998. mode_def VAXstation =                   % VAXstation monitor
  999.   mode_param (pixels_per_inch, 78);
  1000.   mode_param (blacker, 0);
  1001.   mode_param (fillin, 0);
  1002.   mode_param (o_correction, 0);
  1003.   mode_common_setup_;
  1004. enddef;
  1005. vs := VAXstation;
  1006. gpx := VAXstation;
  1007.  
  1008. % From {\tt u12570@uicvm.uic.edu}.  These values are mostly guesses.
  1009. mode_def XeroxEightSevenNineZero =      % Xerox 8790 or 4045
  1010.   mode_param (pixels_per_inch, 300);
  1011.   mode_param (blacker, 0.4);
  1012.   mode_param (fillin, 0);
  1013.   mode_param (o_correction, 0.2);
  1014.   mode_common_setup_;
  1015.   mode_write_white_setup_;
  1016. enddef;
  1017.  
  1018. % From {\tt u12570@uicvm.uic.edu}.  Many variations for different fonts
  1019. % here.
  1020. mode_def XeroxFourZeroFiveZero =        % Xerox 4050
  1021.   mode_param (pixels_per_inch, 300);
  1022.   mode_param (blacker, .7);
  1023.   mode_param (fillin, 0);
  1024.   mode_param (o_correction, .5);
  1025.   mode_common_setup_;
  1026. enddef;
  1027.  
  1028. % From {\tt u12570@uicvm.uic.edu}.  He sent many variations of this,
  1029. % for different fonts.  I don't know a reasonable way to put them in
  1030. % yet, so this is just the basic entry.
  1031. mode_def XeroxNineSevenZeroZero =       % Xerox 9700
  1032.   mode_param (pixels_per_inch, 300);
  1033.   mode_param (blacker, .7);
  1034.   mode_param (fillin, 0);
  1035.   mode_param (o_correction, .5);
  1036.   mode_common_setup_;
  1037. enddef;
  1038.  
  1039. % From {\tt lee@sq.com}.  These values may be improvable.
  1040. mode_def XeroxThreeSevenZeroZero =      % Xerox 3700
  1041.   mode_param (pixels_per_inch, 300);
  1042.   mode_param (blacker, .85);
  1043.   mode_param (fillin, -.1);
  1044.   mode_param (o_correction, .5);
  1045.   mode_common_setup_;
  1046.   mode_write_white_setup_;
  1047. enddef;
  1048.  
  1049. mode_def help =                         % What modes are defined?
  1050.  for i = 1 upto number_of_modes:
  1051.    message mode_name[i];
  1052.  endfor; 
  1053.  % Doesn't make sense to be able to do this twice, so forget this
  1054.  % definition after it's been used.
  1055.  save ?;
  1056. enddef;
  1057.  
  1058. let ? = help_;
  1059.  
  1060. % These variables determine the size of \MF's (window system) window for
  1061. % online output.  These numbers should match whatever the window system
  1062. % is told, or bizarre positioning of the output in the window results.
  1063. % Properly implemented online device drivers will use these values as
  1064. % the default size.
  1065. screen_cols := 400;
  1066. screen_rows := 600;
  1067.  
  1068. % The mode most commonly used to make fonts here.
  1069. localfont := CanonCX;
  1070.  
  1071. %%\bye
  1072. %%%% 
  1073. %%%% Local variables:
  1074. %%%% page-delimiter: "^% here are"
  1075. %%%% End:
  1076.